package utils

import (
	"encoding/json"
	"fmt"
	"os"
	"zinx/ziface"
)

/**
存储有关zinx 框架的全局参数 , 供其他模块使用
参数可以通过 zinx.json 由用户配置
*/

type GlobalObj struct {

	/**
	Server
	*/
	TcpServer ziface.IServer //当前zinx 全局的server 对象
	Host      string         //当前服务器监听的ip
	TcpPort   int            //当前服务器监听的端口
	Name      string         //当前服务的名称

	/**
	zinx
	*/
	Version          string //当前zinx 的版本号
	MaxConn          int    //当前服务器允许的最大连接数
	MaxPackageSize   uint32 //当前zinx 框架数据包的最大值
	WokePoolSize     uint32 //当前业务工作worker 池的goroutine 数量
	MaxWorkerTaskLen uint32 // zinx 框架最多允许用户开辟多少个worker (限定条件)
}

/*
GlobalObject 定义一个全局对外的globalobj 对象
*/
var GlobalObject *GlobalObj

/*
	提供一个init方法, 初始化 GlobalObject
*/

func init() {

	//默认配置
	GlobalObject = &GlobalObj{
		Name:             "ZinxServer",
		Host:             "0.0.0.0",
		Version:          "V0.4",
		TcpPort:          8999,
		MaxConn:          1000,
		MaxPackageSize:   4096,
		WokePoolSize:     10,
		MaxWorkerTaskLen: 1024,
	}

	//尝试从配置文件加载 config/zinx.json
	GlobalObject.Reload()
}

/*
Reload   从config/zinx.json 中加载用户配置
*/
func (g *GlobalObj) Reload() {
	data, err := os.ReadFile("conf/zinx.json")
	if err != nil {
		fmt.Println("conf/zinx.json 读取错误!")
		panic(err)
	}
	err = json.Unmarshal(data, &GlobalObject)
	if err != nil {
		fmt.Println("conf/zinx.json 解析错误!")
		panic(err)
	}

	// 打开 JSON 文件
	//file, err := os.Open("conf/zinx.json")
	//if err != nil {
	//	fmt.Println(err)
	//	return
	//}
	//defer file.Close()
	//// 解码 JSON 数据
	//decoder := json.NewDecoder(file)
	//err = decoder.Decode(&GlobalObject)
	//if err != nil {
	//	fmt.Println(err)
	//	return
	//}
	//fmt.Println(GlobalObject)
}
